Faceting adalah sebuah teknik dalam ggplot yang memisahkan plot
berdasarkan kategorikal variable tambahan yang sudah kita buat.
Terdapat dua macam fungsi facet, pertama facet_wrap() dan kedua adalah facet_grid(). Pada contoh di bawah adalah penggunaan faceting dengan fungsi facet_wrap()
df3 %>%
mutate(kelompok = case_when(tahun %in% c(1949:1951) ~ "Tahun 1949-1951",
tahun %in% c(1952:1954) ~ "Tahun 1952-1954",
tahun %in% c(1955:1957) ~ "Tahun 1955-1957",
TRUE ~ "Tahun 1958-1960")) %>%
mutate(bln = as.character(factor(bulan, levels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
labels=1:12))) %>%
mutate(myd = my(paste0(bln,"-",tahun))) %>%
ggplot(aes(x=myd, y=penumpang, group =1))+
geom_point(aes(color = tahun), size = 3)+
geom_smooth(se=F)+
scale_x_date(date_labels = "%Y",
breaks = seq(ymd("1949-07-01"), ymd("1960-07-01"), by = "1 year"),
name = "Tahun")+
coord_polar("x")+
guides(color = "none")+
facet_wrap(~kelompok, nrow = 2, scale = "free")
Coordinate system dengan posisi pada aesthetic akan sangat terkait
dimana keduanya akan membentuk sebuah plot. Terdapat dua type coordinate
system :
Linear coordinate system yang terdiri atas
Non linear coordinate system yang dapat merubah
bentuk dari plot itu sendiri. Terdiri atas:
Berikut adalah contoh penggunaan coordinate system dengan coord_polar()
df3 %>%
mutate(bln = as.character(factor(bulan,
levels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
labels=1:12))) %>%
mutate(myd = my(paste0(bln,"-",tahun))) %>%
ggplot(aes(x=myd, y=penumpang, group =1))+
geom_point(aes(color = tahun), size = 3)+
geom_smooth(se=F)+
scale_x_date(date_labels = "%Y",
breaks = seq(ymd("1949-07-01"), ymd("1960-07-01"), by = "1 year"),
name = "Tahun")+
coord_polar("x")+
guides(color = "none")
Perlu diketahui bahwa setiap aestetic pada ggplot terasosiasi dengan scale, Seperti pada contoh di bawah, dimana aestetic yang disertakan adalah x, y, dan color
df3 %>%
ggplot(aes(x=bulan, y=penumpang))+
geom_point(aes(color = tahun, size=tahun))+
scale_color_brewer()+
scale_x_discrete()+
scale_y_continuous()
Pada layer scale ini, kita bisa berkreasi untuk memberikan penekanan pada atribut tersebut agar lebih dominan.
Penekanan pada linetype, warna dan shape
df3 %>%
ggplot(aes(x=bulan, y=penumpang))+
geom_line(data = . %>% mutate(max= tahun == 1960), aes(linetype = max, group = tahun))+
geom_point(data = . %>% mutate(max= tahun == 1960), aes(color = max, shape = max), size = 3.5)+
scale_linetype_manual(breaks = c(F,T),
values = c("blank","solid"),
labels = c("< 1960","1960"))+
scale_color_manual(breaks = c(F,T),
values = c("lightblue","darkred"),
labels = c("< 1960","1960"))+
scale_shape_manual(breaks = c(F,T),
values = c(1,17),
labels = c("< 1960","1960"))+
labs(color = "Tahun", shape = "Tahun", linetype = "Tahun")
stat adalah kependekan dari statistic, dimana variabel-variable statistik dibentuk dengan fungsi stat ini. Dalam ggplot, penggunaan fungsi ini diibaratkan kita menambahkan layer statistik pada plot yang akan kita buat tanpa perlu kita siapkan kalkulasinya terlebih dahulu.
Beberapa fungsi stat_() dapat dilihat sebagai berikut di bawah, dan
sesungguhnya fungsi ini sudah ada di dalam fungsi geom_() yang sering
kita pakai.
Ada dua cara menggunakan layer stat ini, pertama kita tambahkan geom_() function terlebih dahulu lalu stat_()
df3 %>%
ggplot(aes(x= bulan, y=penumpang))+
geom_point()+
geom_line(stat = "summary", fun = "median", group = 1, color = "red")
Atau, kita tambahkan stat_() kemudian geom_()
df3 %>%
ggplot(aes(x= bulan, y=penumpang))+
geom_point()+
stat_summary(fun.data = median_hilow, geom = "line", group = 1, color = "blue")
stat_penumpang <- df3 %>%
group_by(bulan) %>%
summarise(mean = mean(penumpang),
median = median(penumpang),
se = sd(penumpang)/sqrt(n()),
max = mean + se,
min = mean - se,
N = n(),
.groups = "drop")
df3 %>%
ggplot(aes(x=bulan, y=penumpang))+
geom_point(alpha = 0.5)+
geom_errorbar(data=stat_penumpang, aes(y=mean, ymin = min, ymax=max), color = "blue")+
geom_point(data=stat_penumpang, aes(y=mean), color="red")Setelah aesthetic sudah ditentukan, maka selanjutnya adalah pemilihan model grafik yang tepat. Dalam pemilihan ini perlu sekali diperhatikan data struktur yang membentuknya, karena ini akan sangat terkait dengan model grafik yang akan dibuat. Berikut adalah beberapa model dasar grafik yang bisa dipakai dalam memvisualisasikan data.
BARPLOT
Sering disebut dengan grafik batang
df2 %>%
pivot_longer(cols = -tahun) %>%
select(tahun, bulan = name, penumpang = value) %>%
mutate(bulan = factor(bulan,
levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>%
ggplot(aes(x=bulan, y=penumpang, fill = tahun))+
geom_col(position = "dodge")
LINE PLOT
Grafik ini cocok dipakai bila parameter acuannya dalam bentuk waktu
df3 %>%
group_by(tahun) %>%
mutate(total = cumsum(penumpang)) %>%
ggplot(aes(x=bulan, y=total, group = tahun))+
geom_line(aes(color = tahun), linewidth = 1)+
scale_y_continuous(transform = "log10")+
scale_color_brewer(palette = "Paired")+
ylab("Kumulatif Jumlah Penumpang")
HEATMAP
Untuk pengamatan yang singkat dan tidak mendetail, umumnya disajikan grafik dalam bentuk heatmap
df3 %>%
ggplot(aes(x=bulan, y=tahun, fill = penumpang))+
geom_tile()+
scale_fill_gradient(low = "lightblue", high = "darkblue")
STEP PLOT
Menggambarkan perubahan parameter terhadap hasil sebelumnya sehingga mudah dalam mengamati pergerakan nilainya.
df3 %>%
filter(tahun %in% c(1949,1960, 1954)) %>%
ggplot(aes(x=bulan, y=penumpang, group = tahun, color = tahun))+
geom_step(direction = "vh", linewidth = 1)+
ylab("Jumlah Penumpang")
Aesthetic adalah atribut pada grafik yang merepresentasikan sebuah data menjadi sesuatu yang dapat diukur/dibandingkan (quantifiable). Beberapa cakupan aesthetic pada ggplot sebagai berikut:
df2 %>%
pivot_longer(cols = -tahun) %>%
select(tahun, bulan = name, penumpang = value) %>%
mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>%
ggplot(aes(x=bulan, y=penumpang, fill = tahun))+
geom_col(position = "dodge")datashape <- df2 %>%
pivot_longer(cols = -tahun) %>%
select(tahun, bulan = name, penumpang = value) %>%
mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>%
filter(bulan %in% c("Feb","Jul"))
df2 %>%
pivot_longer(cols = -tahun) %>%
select(tahun, bulan = name, penumpang = value) %>%
mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>%
ggplot(aes(x=bulan, y=penumpang, group=tahun))+
geom_line(color = "grey70")+
geom_point(data = datashape, aes(fill = tahun, shape = bulan, color=bulan), size = 5)+
geom_text(data = datashape %>% filter(bulan == "Jul"), aes(x=bulan, label = tahun),
nudge_x = 0.7, size = 3)+
guides(fill = FALSE)Sebelum membuat grafik, kita harus perhatikan terlebih dahulu struktur datanya, apakah sudah sesuai dengan grafik yang hendak kita buat atau belum?
Bila belum sesuai, maka harus direstruktur terlebih dahulu agar grafik dapat sesuai dengan yang kita rancang.
| Penumpang Pesawat Terbang | ||||||||||||
| 1949-1960 | ||||||||||||
| tahun | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1949 | 112 | 118 | 132 | 129 | 121 | 135 | 148 | 148 | 136 | 119 | 104 | 118 |
| 1950 | 115 | 126 | 141 | 135 | 125 | 149 | 170 | 170 | 158 | 133 | 114 | 140 |
| 1951 | 145 | 150 | 178 | 163 | 172 | 178 | 199 | 199 | 184 | 162 | 146 | 166 |
| 1952 | 171 | 180 | 193 | 181 | 183 | 218 | 230 | 242 | 209 | 191 | 172 | 194 |
| 1953 | 196 | 196 | 236 | 235 | 229 | 243 | 264 | 272 | 237 | 211 | 180 | 201 |
| 1954 | 204 | 188 | 235 | 227 | 234 | 264 | 302 | 293 | 259 | 229 | 203 | 229 |
| 1955 | 242 | 233 | 267 | 269 | 270 | 315 | 364 | 347 | 312 | 274 | 237 | 278 |
| 1956 | 284 | 277 | 317 | 313 | 318 | 374 | 413 | 405 | 355 | 306 | 271 | 306 |
| 1957 | 315 | 301 | 356 | 348 | 355 | 422 | 465 | 467 | 404 | 347 | 305 | 336 |
| 1958 | 340 | 318 | 362 | 348 | 363 | 435 | 491 | 505 | 404 | 359 | 310 | 337 |
| 1959 | 360 | 342 | 406 | 396 | 420 | 472 | 548 | 559 | 463 | 407 | 362 | 405 |
| 1960 | 417 | 391 | 419 | 461 | 472 | 535 | 622 | 606 | 508 | 461 | 390 | 432 |
Untuk itu kamu harus membuat data setnya menjadi tiga kolom, yaitu kolom “tahun”, kolom “bulan” dan kolom “penumpang”. Caranya adalah dengan menggunakan function pivot_longer() agar parameter “bulan” berada pada kolom yang sama.
Dari sini, barulah data set tersebut dapat diolah menjadi grafik yang kita inginkan.
gt(df3) %>%
tab_header(title = md('Penumpang Pesawat Terbang'),
subtitle = md('1949-1960')) %>%
opt_table_font(font = list(google_font('Chivo'), default_fonts())) %>%
tab_style(location = cells_column_labels(columns = everything()),
style = list(cell_borders(sides = 'bottom',
weight = px(2)),
cell_text(weight = 'bold'))) %>%
tab_options(table.font.size = px(18),
table.border.top.style = 'none',
column_labels.border.bottom.width = 2,
table_body.border.top.style = 'none',
data_row.padding = px(3))| Penumpang Pesawat Terbang | ||
| 1949-1960 | ||
| tahun | bulan | penumpang |
|---|---|---|
| 1949 | Jan | 112 |
| 1949 | Feb | 118 |
| 1949 | Mar | 132 |
| 1949 | Apr | 129 |
| 1949 | May | 121 |
| 1949 | Jun | 135 |
| 1949 | Jul | 148 |
| 1949 | Aug | 148 |
| 1949 | Sep | 136 |
| 1949 | Oct | 119 |
| 1949 | Nov | 104 |
| 1949 | Dec | 118 |
| 1950 | Jan | 115 |
| 1950 | Feb | 126 |
| 1950 | Mar | 141 |
| 1950 | Apr | 135 |
| 1950 | May | 125 |
| 1950 | Jun | 149 |
| 1950 | Jul | 170 |
| 1950 | Aug | 170 |
| 1950 | Sep | 158 |
| 1950 | Oct | 133 |
| 1950 | Nov | 114 |
| 1950 | Dec | 140 |
| 1951 | Jan | 145 |
| 1951 | Feb | 150 |
| 1951 | Mar | 178 |
| 1951 | Apr | 163 |
| 1951 | May | 172 |
| 1951 | Jun | 178 |
| 1951 | Jul | 199 |
| 1951 | Aug | 199 |
| 1951 | Sep | 184 |
| 1951 | Oct | 162 |
| 1951 | Nov | 146 |
| 1951 | Dec | 166 |
| 1952 | Jan | 171 |
| 1952 | Feb | 180 |
| 1952 | Mar | 193 |
| 1952 | Apr | 181 |
| 1952 | May | 183 |
| 1952 | Jun | 218 |
| 1952 | Jul | 230 |
| 1952 | Aug | 242 |
| 1952 | Sep | 209 |
| 1952 | Oct | 191 |
| 1952 | Nov | 172 |
| 1952 | Dec | 194 |
| 1953 | Jan | 196 |
| 1953 | Feb | 196 |
| 1953 | Mar | 236 |
| 1953 | Apr | 235 |
| 1953 | May | 229 |
| 1953 | Jun | 243 |
| 1953 | Jul | 264 |
| 1953 | Aug | 272 |
| 1953 | Sep | 237 |
| 1953 | Oct | 211 |
| 1953 | Nov | 180 |
| 1953 | Dec | 201 |
| 1954 | Jan | 204 |
| 1954 | Feb | 188 |
| 1954 | Mar | 235 |
| 1954 | Apr | 227 |
| 1954 | May | 234 |
| 1954 | Jun | 264 |
| 1954 | Jul | 302 |
| 1954 | Aug | 293 |
| 1954 | Sep | 259 |
| 1954 | Oct | 229 |
| 1954 | Nov | 203 |
| 1954 | Dec | 229 |
| 1955 | Jan | 242 |
| 1955 | Feb | 233 |
| 1955 | Mar | 267 |
| 1955 | Apr | 269 |
| 1955 | May | 270 |
| 1955 | Jun | 315 |
| 1955 | Jul | 364 |
| 1955 | Aug | 347 |
| 1955 | Sep | 312 |
| 1955 | Oct | 274 |
| 1955 | Nov | 237 |
| 1955 | Dec | 278 |
| 1956 | Jan | 284 |
| 1956 | Feb | 277 |
| 1956 | Mar | 317 |
| 1956 | Apr | 313 |
| 1956 | May | 318 |
| 1956 | Jun | 374 |
| 1956 | Jul | 413 |
| 1956 | Aug | 405 |
| 1956 | Sep | 355 |
| 1956 | Oct | 306 |
| 1956 | Nov | 271 |
| 1956 | Dec | 306 |
| 1957 | Jan | 315 |
| 1957 | Feb | 301 |
| 1957 | Mar | 356 |
| 1957 | Apr | 348 |
| 1957 | May | 355 |
| 1957 | Jun | 422 |
| 1957 | Jul | 465 |
| 1957 | Aug | 467 |
| 1957 | Sep | 404 |
| 1957 | Oct | 347 |
| 1957 | Nov | 305 |
| 1957 | Dec | 336 |
| 1958 | Jan | 340 |
| 1958 | Feb | 318 |
| 1958 | Mar | 362 |
| 1958 | Apr | 348 |
| 1958 | May | 363 |
| 1958 | Jun | 435 |
| 1958 | Jul | 491 |
| 1958 | Aug | 505 |
| 1958 | Sep | 404 |
| 1958 | Oct | 359 |
| 1958 | Nov | 310 |
| 1958 | Dec | 337 |
| 1959 | Jan | 360 |
| 1959 | Feb | 342 |
| 1959 | Mar | 406 |
| 1959 | Apr | 396 |
| 1959 | May | 420 |
| 1959 | Jun | 472 |
| 1959 | Jul | 548 |
| 1959 | Aug | 559 |
| 1959 | Sep | 463 |
| 1959 | Oct | 407 |
| 1959 | Nov | 362 |
| 1959 | Dec | 405 |
| 1960 | Jan | 417 |
| 1960 | Feb | 391 |
| 1960 | Mar | 419 |
| 1960 | Apr | 461 |
| 1960 | May | 472 |
| 1960 | Jun | 535 |
| 1960 | Jul | 622 |
| 1960 | Aug | 606 |
| 1960 | Sep | 508 |
| 1960 | Oct | 461 |
| 1960 | Nov | 390 |
| 1960 | Dec | 432 |